package procilege.impl;

import merisis.MerisisVM;
import merisis.contentcloud.ContentCloud;
import merisis.contentcloud.impl.ContentCloudImpl;
import merisis.sense.SenseMaker;
import merisis.sense.impl.SenseMakerImpl;
import merisis.traitspace.History;
import merisis.traitspace.impl.MemoryHistoryImpl;
import merisis.traitspace.impl.TraitSpaceImpl;
import procilege.Procilege;
import procilege.compute.ExprEvaluation;
import procilege.compute.ExprExpand;
import procilege.compute.ExprFormatter;
import procilege.impl.eval.ExprEvaluationImpl;
import procilege.impl.expand.ExprExpandImpl;
import procilege.impl.formatter.ExprFormatterImpl;
import procilege.lang.PrivilegeFormAnalysis;

import com.google.inject.AbstractModule;
import com.google.inject.Scopes;

public class DefaultProcilegeModule extends AbstractModule {

	public void configure() {

		bind(Procilege.class).to(ProcilegeImpl.class) //
				.in(Scopes.SINGLETON);

		bind(History.class).to(MemoryHistoryImpl.class) //
				.in(Scopes.SINGLETON);
		bind(ContentCloud.class).to(ContentCloudImpl.class) //
				.in(Scopes.SINGLETON);
		bind(MerisisVM.class).to(TraitSpaceImpl.class) //
				.in(Scopes.SINGLETON);
		bind(SenseMaker.class).to(SenseMakerImpl.class) //
				.in(Scopes.SINGLETON);

		bind(PrivilegeFormAnalysis.class).to(PrivFormAnalysisImpl.class) //
				.in(Scopes.SINGLETON);

		bind(ExprEvaluation.class).to(ExprEvaluationImpl.class) //
				.in(Scopes.SINGLETON);
		bind(ExprFormatter.class).to(ExprFormatterImpl.class) //
				.in(Scopes.SINGLETON);
		bind(ExprExpand.class).to(ExprExpandImpl.class) //
				.in(Scopes.SINGLETON);
	}
}
